extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, ItemFn};

#[proc_macro_attribute]
// 使用 #[horizon] 宏的函数将会在执行时打印 Horizon 的提示
//  [1m加粗
//  [31m 红色 [34m 蓝色 [36m 青蓝色
pub fn horizon(_attr: TokenStream, item: TokenStream) -> TokenStream {
    let mut input = parse_macro_input!(item as ItemFn);
    let fn_name = &input.sig.ident;
    let original_block = &input.block;
    let colored_output = quote! {
        {
            println!("\x1b[1m\x1b[36m   ! Horizon Executing function: {}\x1b[0m", stringify!(#fn_name)); // 加粗蓝色
            #original_block
        }
    };

    input.block = syn::parse2(colored_output).unwrap();
    TokenStream::from(quote! { #input })
}